package org.mte.sak.file;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

/**
 * Legge il contenuto di un file testo.
 *
 * @author Marco Traversari
 * @version $Revision: 1.1 $ $Date: 2011-04-18 08:37:59 $
 */
public class TextFileReader {

	/**
	 * inputStream
	 */
	private InputStream inputStream = null;

	/**
	 * reader
	 */
	private BufferedReader reader = null;

	/**
	 * filePath
	 */
	private String filePath = null;

	/**
	 * Costruttore di default.
	 */
	 public TextFileReader() {
	 }

	/**
	 * Il costruttore ha bisogno del percorso del file testo che si vuole leggere.
	 * Chiama in automatico il metodo <code>openFile(String filePath)</code>.
	 *
	 * @param filePath è il percorso completo del file testo.
	 *
	 */
	public TextFileReader(String filePath) {
		this.filePath = filePath;
	}

	/**
	 * Returns the filePath.
	 * @return String
	 */
	public String getFilePath() {
		return filePath;
	}

	/**
	 * Sets the filePath.
	 * @param filePath The filePath to set
	 */
	public void setFilePath(String filePath) {
		this.filePath = filePath;
	}

	/**
	 * Apre la risorsa presente nel <code>Classpath</code>.
	 */
	public void openResource() {
		inputStream = getClass().getResourceAsStream(filePath);
		reader = new BufferedReader(new InputStreamReader(inputStream));
	}

	/**
	 * Chiude risorsa aperta
     *
	 * @throws IOException
	 */
	public void closeResource() throws IOException {
		closeFile();
		inputStream.close();
	}

 	/**
 	 * Apre un file testo in lettura.
 	 *
 	 * @throws FileNotFoundException se il file indicato non viene trovato.
	 */
	public void openFile() throws FileNotFoundException {
		reader = new BufferedReader(new FileReader(filePath));
	}

	/**
	 * Legge una riga del file.
	 *
	 * @throws IOException se si verificano problemi di accesso al file.
	 */
	public String readTextLine() throws IOException {
		return reader.readLine();
	}

	/**
	 * Chiude il file.
	 *
	 * @throws IOException se si verificano problemi di accesso al file.
	 */
	public void closeFile() throws IOException {
		reader.close();
	}

	/**
	 * Carica il file in un <code>ArrayList</code>
	 * dove ogni elemento è una riga del file.
	 *
	 * @return ArrayList
	 * @throws IOException
	 */
	public ArrayList<String> list() throws IOException {
		String row = null;
		ArrayList<String> list = new ArrayList<String>();
		while ((row = readTextLine()) != null) {
			list.add(row);
		}
		return list;
	}

	/**
	 * Carica il file in un <code>StringBuffer</code>
	 * dove ogni elemento è una riga del file.
	 *
	 * @return StringBuffer
	 * @throws IOException
	 */
	public StringBuffer loadIntoBuffer() throws IOException {
		String row = null;
		StringBuffer buffer = new StringBuffer();
		while ((row = readTextLine()) != null) {
			buffer.append(row + "\n");
		}
		return buffer;
	}

	/**
	 * Carica il file in un <code>StringBuilder</code>
	 * dove ogni elemento è una riga del file.
	 *
	 * @return un oggetto di tipo <code>StringBuilder</code>
	 * @throws IOException
	 */
	public StringBuilder load() throws IOException {
		String row = null;
		StringBuilder b = new StringBuilder();
		while ((row = readTextLine()) != null) {
			b.append(row + "\n");
		}
		return b;
	}
}
